package com.jjlin.chapter_3;
import java.util.*;

public class CD181{
    /**
     统计和生成不同的二叉树
     由于中序遍历的结果是有序的且没有重复值，因此二叉树是一个二叉搜索树，
     */
    public static int mod = (int)1e9+7;
    public static long numsTree(int n){
        if(n < 2)
            return 1;
        long[] res = new long[n + 1];//res[i]表示有i个节点的二叉树结构的数量
        res[0] = 1;
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= i; j++)//依次以j为头节点
                //以i为头节点的的左子树的二叉树结构数量为res[j - 1]，右子树结构数量为res[i - j]
                res[i] = (res[i] + res[j - 1] * res[i - j] % mod) % mod;
        }
        return res[n];
    }

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(numsTree(n));
    }
}
